package Servidor;

import java.util.ArrayList;
import Servidor.Aviso;

public class Usuario {

    protected String _nombre;
    protected String _user;
    protected String _pass;
    private AulaVirtual _aulaVirtual;
    private ArrayList<Aviso> _listaAvisos = new ArrayList<Aviso>();
    private ArrayList<Asignatura> _listaAsignaturas = new ArrayList<Asignatura>();
    private Sesion sesion;

    public void matricular(Asignatura asignatura) {
        asignatura.addUsuario(this);
        addAsignatura(asignatura);
    }

    public Asignatura findAsignatura(String aIdAsig) {

        for (int i = 0; i < _listaAsignaturas.size(); i++) {
            if (_listaAsignaturas.get(i).getNombre().equals(aIdAsig)) {
                return _listaAsignaturas.get(i);

            }
        }
        return null;
    }

    public void addAsignatura(Asignatura aA) {
        this._listaAsignaturas.add(aA);
    }

    public String getNombre() {
        return this._nombre;
    }

    public void setNombre(String aNombre) {
        this._nombre = aNombre;
    }

    public String getUser() {
        return this._user;
    }

    public void setUser(String aUser) {
        this._user = aUser;
    }

    public String getPass() {
        return this._pass;
    }

    public void setPass(String aPass) {
        this._pass = aPass;
    }

    public Aviso verNotificacion(String aIdNotificacion) {
        Aviso av = this.findAviso(aIdNotificacion);
        av.setLeido(true);
        return av;
    }

    public Aviso findAviso(String aIdAviso) {
        Aviso aviso;

        for (int i = 0; i < _listaAvisos.size(); i++) {
            if (_listaAvisos.get(i).getIdAviso().equals(aIdAviso)) {
                aviso = _listaAvisos.get(i);
                return aviso;
            }
        }
        return null;

    }

    public void addAviso(Aviso aAv) {
        _listaAvisos.add(aAv);

        if (sesion != null) {
            sesion.enviarAviso("Nueva notificación");
        }
    }

    ArrayList<ExamenEspecifico> getExamenesRealizados() {
        ArrayList<ExamenEspecifico> ret = new ArrayList<ExamenEspecifico>();

        for (int i = 0; i < _listaAsignaturas.size(); i++) {
            Asignatura a = _listaAsignaturas.get(i);

            Examen[] examenesAsignatura = a.getExamenes();

            for (int j = 0; j < examenesAsignatura.length; j++) {

                if (examenesAsignatura[i].getCorreccion()) {
                    ExamenEspecifico ee = examenesAsignatura[j].getExamenEspecifico((Alumno) this);

                    if (ee != null) {
                        ret.add(ee);
                    }
                }
            }
        }

        return ret;
    }

    void setSesion(Sesion ses) {
        sesion = ses;
    }

    void deleteSesion() {
        sesion = null;
    }

    ArrayList<Aviso> getAvisos() {
        return _listaAvisos;
    }
	
	public void removeAviso(String idExamen) {
		for (int i = 0; i < _listaAvisos.size(); i++)
			if (_listaAvisos.get(i) instanceof AvisoInformacion)
				if (((AvisoInformacion) _listaAvisos.get(i)).getExamen().getIdExamen().equals(idExamen))
					_listaAvisos.remove(i);
	}
}